<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let arr = [1, 3, 5, 3, 4, 1, 5, 7];
        // 方法一，indexof检索数组
        Array.prototype.method1 = function () {
            let newArr = [];
            for (let i = 0, l = this.length; i < l; i++) {
                if (newArr.indexOf(this[i]) == -1) {
                    newArr.push(this[i]);
                }
            }
            return newArr;
        }

        // 方法二：利用对象Object的属性key进行筛选
        Array.prototype.method2 = function () {
            let hashObj = {};
            let newArr = [];
            for (let i = 0; i < this.length; i++) {
                if (!hashObj[arr[i]]) {
                    // 存储进对象
                    hashObj[arr[i]] = true;
                    newArr.push(arr[i]);
                }
            }
            console.log(hashObj);
            return newArr;
        }

        // 方法三：判断数组当前元素在此数组中第一次出现位置是不是当前元素位置，如果不是那就是重复元素
        Array.prototype.method3 = function () {
            let newArr = [this[0]];  //把第一项放进一个数组中，这样就可以少判断一次
            for (let i = 1; i < this.length; i++) {  // 从数组第二项开始遍历
                // 如果数组当前元素第一次出现位置是当前下标，说明是第一次出现此元素，否则就是重复元素
                if (this.indexOf(this[i]) == i) {
                    newArr.push(this[i]);
                }
            }
            return newArr;
        }

        // 方法四：利用sort排序，然后对相邻元素进行比较
        Array.prototype.method4 = function () {
            this.sort();
            console.log(this);
            let newArr = [];
            for (let i = 0; i < this.length; i++) {
                if (arr[i] !== arr[i + 1]) {
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }

        //new Set去重
        let obj = new Set(arr);
        let newArr = [...obj];



        // 方法五 -- 利用indexOf返回元素第一次出现下标
        Array.prototype.method5 = function () {
            let arr = [];
            for (let i = 0; i < this.length; i++) {
                // console.log(this.indexOf(this[i]));
                if (this.indexOf(this[i]) == i) {
                    arr.push(this[i])
                }
            }
            return arr
        }

        console.log(arr.method5());
    </script>
</body>

</html>